﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using Entidades;

namespace AccesoBD
{
    public class PagosMedico
    {
        public static bool registrarPagoMedico(PagoMedico pago)
        {
            bool res = false;
            SqlConnection conexion = DB.Conectar();
            SqlTransaction trans = null;
            try
            {
                trans = conexion.BeginTransaction();
                string comando = "INSERT INTO Pago_Medico (fechaPago, montoTotal, montoTotalLetras, legajoMedico, codEspecialidad, fechaAtencion) "
                                + "VALUES (@fechaPago,@total,@totalLetras,@legajo,@idEsp,@fechaAtencion)";
                SqlCommand sqlcmd = new SqlCommand(comando, conexion);
                sqlcmd.Parameters.Add(new SqlParameter("@fechaPago", pago.FechaPago));
                sqlcmd.Parameters.Add(new SqlParameter("@total", pago.Total));
                sqlcmd.Parameters.Add(new SqlParameter("@totalLetras", pago.TotalenLetras));
                sqlcmd.Parameters.Add(new SqlParameter("@legajo", pago.LegajoMedico));
                sqlcmd.Parameters.Add(new SqlParameter("@idEsp", pago.IdEspecialidad));
                sqlcmd.Parameters.Add(new SqlParameter("@fechaAtencion", pago.FechaAtencion));
                sqlcmd.Transaction = trans;
                int filas = sqlcmd.ExecuteNonQuery();

                if (filas > 0)
                {
                    //obtenemos el id de pago
                    comando = "SELECT MAX(idPago) FROM Pago_Medico";
                    sqlcmd = new SqlCommand(comando, conexion);
                    sqlcmd.Transaction = trans;
                    long idPago = long.Parse(sqlcmd.ExecuteScalar().ToString());
                    pago.IdPagoMedico = idPago;

                    //insertamos los detalles
                    comando = "INSERT INTO Detalle_PagoMedico (idPagoMedico, concepto, monto, idTurno, idItemListadoOrdenLlegada) "
                            + "VALUES (@idPago,@concepto,@monto,@idTurno,@idItem)";
                    foreach (DetallePagoMedico item in pago.DetallePagoMedico)
                    {
                        sqlcmd = new SqlCommand(comando, conexion);
                        sqlcmd.Parameters.Add(new SqlParameter("@idPago", pago.IdPagoMedico));
                        sqlcmd.Parameters.Add(new SqlParameter("@concepto", item.Concepto));
                        sqlcmd.Parameters.Add(new SqlParameter("@monto", item.Monto));
                        if (item.IdTurno == null)
                            sqlcmd.Parameters.Add(new SqlParameter("@idTurno", DBNull.Value));
                        else
                            sqlcmd.Parameters.Add(new SqlParameter("@idTurno", item.IdTurno));
                        if (item.IdItemListado == null)
                            sqlcmd.Parameters.Add(new SqlParameter("@idItem", DBNull.Value));
                        else
                            sqlcmd.Parameters.Add(new SqlParameter("@idItem", item.IdItemListado));
                        sqlcmd.Transaction = trans;
                        filas = sqlcmd.ExecuteNonQuery();
                    }

                    //actualizamos los turnos y los items de orden de llegada indicandolos como pagados al med
                    if (filas > 0)
                    {
                        foreach (DetallePagoMedico item in pago.DetallePagoMedico)
                        {
                            if (item.IdTurno != null)
                            {
                                comando = "UPDATE Turno SET idPagoMedico = @idPago WHERE (idTurno = @idTurno)";
                                sqlcmd = new SqlCommand(comando, conexion);
                                sqlcmd.Parameters.Add(new SqlParameter("@idPago", pago.IdPagoMedico));
                                sqlcmd.Parameters.Add(new SqlParameter("@idTurno", item.IdTurno));
                                sqlcmd.Transaction = trans;
                                sqlcmd.ExecuteNonQuery();
                            }
                            else
                            {
                                comando = "UPDATE Listado_OrdenLLegada SET idPagoMedico = @idPago WHERE (idItemListadoOrdenLlegada = @idItem)";
                                sqlcmd = new SqlCommand(comando, conexion);
                                sqlcmd.Parameters.Add(new SqlParameter("@idPago", pago.IdPagoMedico));
                                sqlcmd.Parameters.Add(new SqlParameter("@idItem", item.IdItemListado));
                                sqlcmd.Transaction = trans;
                                sqlcmd.ExecuteNonQuery();
                            }
                        }
                        res = true;
                    }
                    else
                        res = false;

                }

            }
            catch (Exception ex)
            {

                throw;
            }
            finally
            {
                conexion.Close();
            }
            return res;
        }
    }
}
